package com.jq.jqaicode.common.file;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import com.jq.jqaicode.common.AppConstant;
import com.jq.jqaicode.model.dto.HtmlCodeResult;
import com.jq.jqaicode.model.enums.CodeGenTypeEnum;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class VueCodeParserSave extends CodeParserSaveTemplate {

    private static final Pattern p4_PATTERN = Pattern.compile("# home[^\\s]+\\s+```vue\\s*([\\s\\S]*?)\\s*```",Pattern.MULTILINE);


    @Override
    protected HtmlCodeResult parseCode(String message) {
        if (StrUtil.isBlank(message) && !message.trim().isEmpty()) {
            return null;
        }
        HtmlCodeResult htmlCodeResult=new HtmlCodeResult();
        // 提取各类代码
        String viewsCode = extractCodeByPattern(message, p4_PATTERN);
        if (StrUtil.isNotBlank(viewsCode) && StrUtil.isNotBlank(viewsCode.trim())) {
            htmlCodeResult.setHtmlCode(viewsCode.trim());
        }else {
            // 如果没有找到代码块，将整个内容作为HTML
            htmlCodeResult.setHtmlCode(message.trim());
        }
        return htmlCodeResult;
    }

    @Override
    protected void saveFiles(HtmlCodeResult htmlCodeResult, String buildUniqueDir) {
        // 提取各类代码
        if (StrUtil.isNotBlank(htmlCodeResult.getHtmlCode())) {
            writeToFile(buildUniqueDir, "src/views/home.vue", htmlCodeResult.getHtmlCode());
            //复制模版到新生成的vue项目下
            copyVueTmp(buildUniqueDir);
        }
    }

    /**
     * 部署打包
     * @param appId
     */
    public static void build(String appId){
        try {
            VueBuilder.runCommand(buildUniqueDir(appId, CodeGenTypeEnum.VUE_FILE.getValue()));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 复制vue系统模版文件到部署目录
     * @param buildUniqueDir 目标路基
     */
    private static void copyVueTmp(String buildUniqueDir){
        try {
            FileUtil.copyContent(new File(AppConstant.VUE_CODE_ROOT_DIR), new File(buildUniqueDir), true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 根据正则模式提取代码
     *
     * @param content 原始内容
     * @param pattern 正则模式
     * @return 提取的代码
     */
    private static String extractCodeByPattern(String content, Pattern pattern) {
        Matcher matcher = pattern.matcher(content);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }
}
